/**
 * Created by Eva on 2020/3/24.
 */
//首先对参数进行整理
var option = {};
for(var i = 2; i < process.argv.length; i+=2){
    if(!isNaN(process.argv[i+1])){
        process.argv[i+1] = parseInt(process.argv[i+1]);
    }
    option[process.argv[i].substring(1)] = process.argv[i+1];
    
}
var fs = require('fs');
//默认的项目配置数据
var projectData = {
    'name' : option.name || 'test',
    'projectContent' : [
        {
            'name' : 'pages',
            'type' : 'dir'
        },
        {
            'name' : 'assets',
            'type' : 'dir',
            'sub' : [
                {
                    'name' : 'css',
                    'type' : 'dir',
                    'sub' : [
                        {
                            'name' : 'topdraw.css',
                            'type' : 'file',
                            'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/apps/HBInteractiveEducation/assets/css/topdraw.css"
                
                        }
                    ]
                },
                {
                    'name' : 'img',
                    'type' : 'dir',
                    'sub' : [
                        
                    ]
                }
            ]
        },
        {
            'name' : 'js',
            'type' : 'dir',
            'sub' : [
                {
                    'name' : 'topdraw.component.js',
                    'type' : 'file',
                    'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/apps/HBInteractiveEducation/js/topdraw.component.js"
        
                },
                {
                    'name' : 'topdraw.core.js',
                    'type' : 'file',
                    'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/apps/HBInteractiveEducation/js/topdraw.core.js"
        
                },
                {
                    'name' : 'topdraw.utility.js',
                    'type' : 'file',
                    'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/apps/HBInteractiveEducation/js/topdraw.utility.js"
        
                }
            ]
        },
        {
            'name' : 'app.js',
            'type' : 'file',
            'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/apps/HBInteractiveEducation/app.js"

        }
    ],
    'fileData' : [
        {
            'name' : 'css',
            'type' : 'dir',
            'sub' : [
                {
                    'name' : 'index.css',
                    'type' : 'file',
                    'content' : ""
                }
            ]
        },
        {
            'name' : 'js',
            'type' : 'dir',
            'sub' : [
                {
                    'name' : 'index.js',
                    'type' : 'file',
                    'content' : ""
                },
                {
                    'name' : 'config.js',
                    'type' : 'file',
                    'content' : ""
                },
                {
                    'name' : 'config',
                    'type' : 'dir',
                    'sub' : [
                        {
                            'name' : 'config.js',
                            'type' : 'file',
                            'content' : ""
                        },
                        {
                            'name' : 'server.js',
                            'type' : 'file',
                            'contentPath' : "/Users/eva/Desktop/virtualMachine/share-files/workCode/sparrow.epg/vocalConcert/config/circumstance.js"
                        },
                    ]
                }
            ]
        },
        {
            'name' : 'img',
            'type' : 'dir'
        },
        {
            'name' : 'index.html',
            'type' : 'file',
            'content' : ""
        }
    ]

};
//判断是否自定义配置数据
if(option.module){
    var strData = fs.readFileSync('./src/project.config.json').toString();
    if(strData){
        var oData = JSON.parse(strData);
        if(oData[option.module]){
            projectData = oData[option.module];
        }
    }
}
var strRootPath = (option.root ? option.root + (option.root.lastIndexOf("/") == option.root.length-1 ? "" : "/") : "") + projectData.name
//不存在项目就创建项目，并且项目相关文件，只创建一次
if(!fs.existsSync(strRootPath)){
    fs.mkdirSync(strRootPath);
    createProject();
}
//根据输入页面名称创建页面目录
process.stdin.resume();
process.stdout.write('请输入页面名称：');
process.stdin.on('data', function(chunk) {
    
    if(!fs.existsSync(strRootPath+"/pages")){
        fs.mkdirSync(strRootPath+"/pages");
    }
    strPageName = chunk.toString().trim() || "index";
    var arrPageName = strPageName.split(" ");
    for(let i = 0; i < arrPageName.length; i++){
        createPage(arrPageName[i]);
    }
    process.exit();
});
/**
 * 创建项目
 */
function createProject(){
    var projectContent = projectData.projectContent;
    traverse(projectContent,strRootPath);
}
/**
 * 遍历文件对象
 * @param {遍历对象} o 
 * @param {遍历路径} strRelativePath 
 */
function traverse(o,strRelativePath){
    if(!o){
        return;
    }
    var oTemp = JSON.parse(JSON.stringify(o));
    if ( oTemp && oTemp.forEach ) {
        oTemp.forEach(function(f) {
            f.path = strRelativePath+ '/' + f.name;
            generatorFile(f);
            traverse(f.sub,strRelativePath + '/' +f.name);
        });

    }
}
/**
 * 创建页面
 * @param {页面名称} strName 
 */
function createPage(strName){
    if(!fs.existsSync(strRootPath+"/pages/" + strName)){
        fs.mkdirSync(strRootPath+"/pages/" + strName);
    }
    var fileData = projectData.fileData;
    traverse(fileData,strRootPath + '/pages/'+ strName);
}
/**
 * 根据文件类型创建文件
 * @param {文件} f 
 */
function generatorFile(f){
    f.content = f.content || f.contentPath ? fs.existsSync(f.contentPath)&&fs.readFileSync(f.contentPath) || "": '';
    switch (f.type) {
        case 'dir':
            if(!fs.existsSync(f.path)){
                fs.mkdirSync(f.path);
            }else{
                console.log(f.path+"文件已存在");
            }
            break;
        case 'file':
            if(!fs.existsSync(f.path)){
                fs.writeFileSync(f.path, f.content);
            }else{
                console.log(f.path+"文件已存在");
            }
            break;
        default :
            break;

    }
}


